package com.example.emos.api.config;

import cn.dev33.satoken.stp.StpInterface;
import com.example.emos.api.db.dao.TbUserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
 * 使用sa-token框架来进行权限和角色的判定
 * Sa-Token框架为我们提供了注解
 * @SaCheckPermisson注解判断用户是否具备ROOT或者AMECT：INSERT权限
 * @SaCheckPermisson或者@SaCheckRole注解拦截HTTP请求的时候会调用特定的Java类
 * 来获取用户的权限和角色信息，然后跟注解要求的权限或者角色做匹配，如果能匹配上，就会
 * 允许HTTP请求调用Web方法，否则就拒绝HTTP请求。
 */

/**
 * 这个Java类就是Sa-Token框架拦截HTTP请求之后调用的类。在这个类中，声明两个方法
 * 分别来查询用户实际的权限和角色，然后Sa-Token框架的@SacheckPermiss或者@SaCheckRole
 * 注解会根据查询出来的权限和角色跟注解要求的权限或者角色做匹配
 */

@Component
public class StpInterfaceImpl implements StpInterface {
    @Autowired
    private TbUserDao userDao;

    /**
     * 返回一个用户所拥有的权限集合
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginKey) {
        int userId = Integer.parseInt(loginId.toString());
        Set<String> permissions = userDao.searchUserPermissions(userId);
        ArrayList list = new ArrayList();
        list.addAll(permissions);
        return list;
    }


    /**
     * 返回一个用户所拥有的角色标识集合
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginKey) {
        //因为本项目不需要用到角色判定，所以这里就返回一个空的ArrayList对象
        ArrayList<String> list = new ArrayList<String>();
        return list;
    }

}